/*
 * Copyright 2010 Nicolas Martignole.
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
 *  required by applicable law or agreed to in writing, software distributed under
 *  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
 *  OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions
 *  and limitations under the License.
 */

package org.letouilleur.celerio

class Account {
  String id
  String username
  String password
  String email
  boolean enabled
  Date birthDate
  CivilityEnum civility
  String firstName
  String lastName

  // Many to one
  Address address

  // One to Many for books and many-to-many for role via accountRole
  static hasMany = [books: Book, rolesViaAccountRole: AccountRole]

  static belongsTo = AccountRole

  static constraints = {
    username(blank: false,size:4..50)
    password(blank: false,size:4..50)
    enabled()
    firstName()
    lastName()
    email(email: true)
    address(nullable: true)
    birthDate(nullable:true, max: new Date())
    civility(maxSize: 2)
    rolesViaAccountRole(nullable: true)
    books(nullable: true)
  }

  static mapping = {
    id generator:'uuid',column:'accountId',type: 'string'	
    books lazy:false
  }

  def String toString() {
    firstName + " " + lastName
  }

  // Used by SpringSecurity in GrailsDaoImpl
  def Set getAuthorities(){
    def s=new HashSet()
    rolesViaAccountRole*.role.each {s.add(it)}
    return s
  }

  def void setAuthorities() {
    // not used but required for Groovy 
  }
}
